#ifndef __MYSTRING_H_
#define __MYSTRING_H_


#include<iostream>


class MyStringArray;

class MyString
{

public:
    MyString();
    MyString(const char*str);
    MyString(const MyString&s);

    //从void 变成 有返回值，是为了能够连续赋值
    // 而返回值用引用，是为了不要多次的拷贝，返回左值会发生拷贝
    MyString& operator=(const MyString &s);
    MyString& operator+=(const MyString&s);
    MyString& operator+=(const char& c);
    MyString operator+(const MyString&s);
    MyString operator-(const MyString&s);

    MyString& operator-=(const MyString&s);
    ~MyString();
    void clear( MyString&s);  

    bool operator==(const MyString &s);

    bool operator&&(const MyString &s);  //不允许重载

    char& operator[](int index);
    
    
     //类型转换运算符重载
    operator int();


//     //字符串切割

  MyStringArray split( const MyString& delim );
   




 friend std::ostream &operator<<(std::ostream &os, const MyString &s);
 friend std::istream &operator>>(std::istream &is,  MyString &s);

 friend class MyStringArray;  



private:

    char* string;
    int   size;
    int   capacity;


};

 std::ostream& operator<<(std::ostream &os,const MyString& s);
 std::istream &operator>>(std::istream &is,  MyString &s);





class MyStringArray
{
    
    public:
    MyStringArray();
   
    
    MyStringArray(const MyStringArray& array);// 拷贝构造

    ~MyStringArray(); //析构函数

    MyStringArray& operator +=(const MyString&str);  //+= 的重载

    MyStringArray operator +(const MyString&str); //+ 的重载
    
    MyStringArray& operator =(const MyStringArray&str);// = 的重载



    MyStringArray& operator -=(const MyString&str);//-= 的重载
    MyStringArray operator -(const MyString&str);//- 的重载


    MyString& operator[](int index);






//     // +    -=      -       []
//     // <<   >>

    friend std::ostream &operator<<(std::ostream &os, const MyStringArray &array);
     friend std::istream &operator>>(std::istream &os,  MyStringArray &array);
    void show();
    private:
        int size;
        int capacity;
        MyString *array;
};

#endif